<?
 
class SimpleImage {

    static function resizeAndCrop($input, $output, $width, $height=0){
        
        SimpleImage::resize($input, $output, intval($width), intval($height));
        SimpleImage::crop($output, $output);
        
    }

    static function resize($file_input, $file_output, $w_o, $h_o=0) {
        list($w_i, $h_i, $type) = getimagesize($file_input);
        if (!$w_i || !$h_i){
            throw new Exception('SimpleImage::resize. Невозможно получить длину и ширину изображения.');
        }
        
        $types = array('','gif','jpeg','png');
        $ext = $types[$type];
        if ($ext){
            $func = 'imagecreatefrom'.$ext;
            $img = $func($file_input);
        }else{
            throw new Exception('SimpleImage::resize. Некорректный формат файла.');
        }
        
        if($w_o > $w_i) $w_o = $w_i;
        if($h_o > $h_i) $h_o = $h_i;
        
        if($h_o == 0){
            $h_o = $w_o;
            if($w_i > $h_i){ $h_o = $w_o; $w_o = 0; }
            if($h_i > $w_i){ $w_o = $h_o; $h_o = 0; }
        }
        
        if (!$h_o) $h_o = $w_o/($w_i/$h_i);
        if (!$w_o) $w_o = $h_o/($h_i/$w_i);
        
        $img_o = imagecreatetruecolor($w_o, $h_o);
        imagecopyresampled($img_o, $img, 0, 0, 0, 0, $w_o, $h_o, $w_i, $h_i);
        if ($type == 2) {
            return imagejpeg($img_o,$file_output,100);
        } else {
            $func = 'image'.$ext;
            return $func($img_o,$file_output);
        }
    }

    static function crop($file_input, $file_output, $crop = 'square') {
        list($w_i, $h_i, $type) = getimagesize($file_input);
        if (!$w_i || !$h_i) {
            throw new Exception('SimpleImage::crop. Невозможно получить длину и ширину изображения.');
        }
        
        $types = array('','gif','jpeg','png');
        $ext = $types[$type];
        if ($ext) {
            $func = 'imagecreatefrom'.$ext;
            $img = $func($file_input);
        } else {
            throw new Exception('SimpleImage::crop. Некорректный формат файла.');
        }
        
        if ($crop == 'square') {
            $min = $w_i;
            if ($w_i > $h_i) $min = $h_i;
            $w_o = $h_o = $min;
            $x_o = $y_o = 0;
            if($w_i != $w_o) $x_o = ($w_i/2)-($w_o/2);
            if($h_i != $h_o) $y_o = ($h_i/2)-($h_o/2);
        } else {
            list($x_o, $y_o, $w_o, $h_o) = $crop;
            if ($w_o < 0) $w_o += $w_i;
            $w_o -= $x_o;
            if ($h_o < 0) $h_o += $h_i;
            $h_o -= $y_o;
        }
        $img_o = imagecreatetruecolor($w_o, $h_o);
        imagecopy($img_o, $img, 0, 0, $x_o, $y_o, $w_o, $h_o);
        if ($type == 2) {
            return imagejpeg($img_o,$file_output,100);
        } else {
            $func = 'image'.$ext;
            return $func($img_o,$file_output);
        }
    }

}
